#include <stdlib.h>
#include <stdio.h>
#include <SFML/Graphics.h>

#define LONGUEUR_FENETRE 1024
#define LARGEUR_FENETRE 768
#define LONGUEUR_CASE 32
#define LARGEUR_CASE 32

#define NOMBRE_CASES_LONGUEUR (LONGUEUR_FENETRE / LONGUEUR_CASE)
#define NOMBRE_CASES_LARGEUR (LARGEUR_FENETRE / LARGEUR_CASE)

#define MAX_CAISSES 64
#define MAX_GARDE 64

enum
{
	CASE_VIDE,
	CASE_SOL,
	CASE_MUR
};

enum
{
	ENTITE_VIDE,
	ENTITE_DEPART,
	ENTITE_ARRIVE,
	ENTITE_CLE,
	ENTITE_PORTE_OUVERTE,
	ENTITE_PORTE_FERMEE,
	ENTITE_CAISSE,
	ENTITE_GARDE,
	ENTITE_DIRECTION_GARDE

};

enum
{
	DIR_DROITE = 1,
	DIR_GAUCHE,
	DIR_HAUT,
	DIR_BAS
};

// variables globales nécessaires
// à la fois pour l'éditeur et le jeu
sfRenderWindow* App;

sfImage* imgSol, *imgMur, *imgArrivee, *imgCle, *imgPorte_fermee, *imgPorte_ouverte, *imgCaisse;
sfImage *imgDepart_bas, *imgDepart_droite, *imgDepart_gauche, *imgDepart_haut;
sfImage *imgJoueur_bas[3], *imgJoueur_droite[3], *imgJoueur_gauche[3], *imgJoueur_haut[3];
sfImage *imgGarde_bas[3], *imgGarde_droite[3], *imgGarde_gauche[3], *imgGarde_haut[3];
sfImage *imgDS_haut_bas, *imgDS_bas_haut, *imgDS_droite_gauche, *imgDS_gauche_droite;
sfImage *imgDG_haut, *imgDG_bas, *imgDG_droite, *imgDG_gauche;

sfSprite* grille[NOMBRE_CASES_LONGUEUR][NOMBRE_CASES_LARGEUR];
sfSprite* entites[NOMBRE_CASES_LONGUEUR][NOMBRE_CASES_LARGEUR];

int ed_Init();
int ed_ProcessEvent(sfEvent evt);
int ed_Loop();
int ed_Destroy();

int gm_Load(const char *niveau);
int gm_Init();
int gm_ProcessEvent(sfEvent evt);
int gm_Loop();
int gm_Destroy();

int printLog(char *texte);
